package com.third.device.mg.serialport.factory.autorail

import com.third.device.mg.serialport.utils.SLog
import com.third.device.mg.serialport.utils.toHexString

/**
 * @Date 2022/1/13
 * Description:奥特威 公司的产品
 *
 */
abstract class BaseAutorailsProduct {

    /**
     * 产品描述
     */
    abstract fun productDescribe(): String

    companion object {
        private const val TAG = "Autorails_Command:"

        //功能模式 -- 1 byte
        const val READ_MODE = 0x01.toByte() //功能:读指令
        const val WRITE_MODE = 0x02.toByte()//功能:写命令
        const val CONTROL_MODE = 0x03.toByte() //功能:控制指令
        const val BACK_MODE = 0x4.toByte() //功能:从机请求指令，主机返回
    }

    /**
     * 奥特威CRC校验
     * @param pushMsg 已经拼凑的完整指令信息（除开最后2位校验码）
     * @return 拼凑好指令（最后2位是CRC校验码）
     */
    fun crcCheck(pushMsg:ByteArray):ByteArray{
        //校验码
        val code = AutorailsCRC.crcRTU2L(pushMsg)
        val command = ByteArray(pushMsg.size + code.size)
        System.arraycopy(pushMsg, 0, command, 0, pushMsg.size)
        System.arraycopy(code, 0, command, pushMsg.size, code.size)
        SLog.d(TAG,command.toHexString())
        return command
    }
}